﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Dominio.Repositorios;
using WebUI.Models;

namespace WebUI.Controllers
{
    public class ContaController : Controller{
        private IUsuarioRepository _usuarioRepository;

        public ContaController(IUsuarioRepository usuarioRepository) {
            _usuarioRepository = usuarioRepository;
        }

        public ActionResult Index(){
            var usuario = _usuarioRepository.Obtem(1);

            ViewBag.Contas = usuario.Contas.Select(x => new ContaItemModel(x)).ToList();
            return PartialView();
        }

        [HttpPost]
        public ActionResult Index(ContaModel model) {
            var usuario = _usuarioRepository.Obtem(1);

            if (ModelState.IsValid)
                usuario.NovaConta(model.NomeConta);

            return RedirectToAction("ObtemContas");
        }

        public ActionResult ObtemContas() {
            var usuario = _usuarioRepository.Obtem(1);

            return PartialView("Contas", usuario.Contas.Select(x => new ContaItemModel(x)).ToList());
        }

        public ActionResult Alterar(int id){
            var usuario = _usuarioRepository.Obtem(1);

            return PartialView(new ContaEditModel(usuario.ObtemConta(id)));
        }

        [HttpPost]
        public ActionResult Alterar(ContaEditModel model)        {
            var usuario = _usuarioRepository.Obtem(1);
            var conta = usuario.ObtemConta(model.IdConta);
            conta.Nome = model.NomeConta;

            return PartialView("Alterada", new ContaItemModel(conta));
        }

        public ActionResult Apagar(int id){
            var usuario = _usuarioRepository.Obtem(1);
            usuario.ApagaConta(id);

            return Json(true);
        }

        public ActionResult Cancelar(long id) {
            var usuario = _usuarioRepository.Obtem(1);
            var conta = usuario.ObtemConta(id);

            return PartialView("Alterada", new ContaItemModel(conta));
        }
    }
}
